package com.sky.task;

import com.sky.entity.Orders;
import com.sky.mapper.OrdersMapper;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;
import java.util.List;
import java.util.stream.Collectors;

//@Api("订单状态修改定时任务类")
//@Component
//@Slf4j
//public class OrderTask {
//    @Autowired
//    private OrdersMapper ordersMapper;
//
//    /**
//     * 任务一当订单处于待支付状态超过下单时间15分钟后自动将订单状态改为已取消
//     * 定时任务每分钟自动轮询一次
//     * 订单状态 1待付款 2待接单 3已接单 4派送中 5已完成 6已取消
//     */
//    @Scheduled(cron = "0 0/1 * * * ?")
//    public void cancelOrder() {
//        log.info("超时未支付订单检查定时任务执行");
//        //1-查询下单时间小于当前时间-15分钟的订单，且订单状态为待支付
//        //1.1-获取当前时间减去15分钟的具体时间值
//        LocalDateTime dateTime = LocalDateTime.now().plusMinutes(-15);
//        //2-查询状态为未支付且时间为 dateTime 的订单
//        List<Orders> ordersList = ordersMapper.getStatusAndTime(Orders.PENDING_PAYMENT, dateTime);
//        //3-批量修改订单状态，修改时间，取消原因
//        //3.1-判断集合是否为空
//        if (ObjectUtils.isNotEmpty(ordersList)) {
//
//            //3.2 获取n条订单的id
//            List<Long> ids = ordersList.stream().map(orders -> orders.getId()).collect(Collectors.toList());
//            //4-重新构建订单属性
//            Orders build = Orders.builder()
//                    .orderTime(LocalDateTime.now())
//                    .status(Orders.CANCELLED)
//                    .cancelReason("订单超时未支付，订单已自动取消")
//                    .build();
//            //5-施行批量修改
//            ordersMapper.batcupdate(ids,build);
//        }
//
//
//    }
//
//    /**
//     * 任务二当订单处于派送中状态且该状态一直未被修改，将在次日凌晨一点自动将订单状态改为已完成
//     * 定时任务次日凌晨一点执行一次自动轮询一次
//     * 订单状态 1待付款 2待接单 3已接单 4派送中 5已完成 6已取消
//     */
//    @Scheduled(cron = "0 0 1 * * ?")
//    public void  completeOrder() {
//        log.info("超时未支付订单检查定时任务执行");
//        //1-查询下单时间小于当前时间-15分钟的订单，且订单状态为待支付
//        //1.1-获取当前时间减去15分钟的具体时间值
//        LocalDateTime dateTime = LocalDateTime.now().plusMinutes(-60);
//        //2-查询状态为派送中且时间为 dateTime 的订单
//        List<Orders> ordersList = ordersMapper.getStatusAndTime(Orders.DELIVERY_IN_PROGRESS, dateTime);
//        //3-批量修改订单状态，修改时间;
//        //3.1-判断集合是否为空
//        if (ObjectUtils.isNotEmpty(ordersList)) {
//
//            //3.2 获取n条订单的id
//            List<Long> ids = ordersList.stream().map(orders -> orders.getId()).collect(Collectors.toList());
//            //4-重新构建订单属性
//            Orders build = Orders.builder()
//                    .orderTime(LocalDateTime.now())
//                    .status(Orders.COMPLETED)
//                    .build();
//            //5-施行批量修改
//            ordersMapper.batcupdate(ids,build);
//        }
//
//
//    }
//}
